<!DOCTYPE html>
<li lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Document</title>
  <style>
    body {
      line-height: 40px
    }
    span {
      color: red
    }
  </style>
</head>
<body>
  <ul>
    <li>我们可以给参数类型之后，添加函数的返回值类型。typeScipt 能根据返回语句自动推断出返回值的类型。因此我们经常省略它</li>
    <li>TypeScript里的每个函数参数都是必须的,传递给一个函数的参数个数必须与函数期望的参数个数一致。</li>
    <li>在TypeScript里我们可以在参数名旁使用 ?实现可选参数的功能</li>
    <li><span>可选参数</span>必须跟在必须参数后面</li>
    <li>在所有必须参数后面的带默认初始化的参数都是可选的</li>
    <li>与普通可选参数不同的是，<span>带默认值</span>的参数不需要放在必须参数的后面,如果带默认值的参数出现在必须参数前面，用户必须明确的传入 undefined值来获得默认值</li>
    <li> 有时，你想同时操作多个参数，或者你并不知道会有多少参数传递进来</li>
    <li>
      <span>剩余参数</span>在TypeScript里，你可以把所有参数收集到一个变量里
    </li>
    <li>
      <h3>typeScript 中的this</h3>
      <ul>
        <li>TypeScript能通知你错误地使用了 this的地方</li>
        <li>
          <span>闭包中的 this,可不是指向 window,这种说法可以满足大多数的情形。可是 ts代码中 54-72 行，足以推翻这个大部分人认为正确的结论。<span>主要由于箭头函数中 this 的继承性，继承的 this 的指向会因为调用者的不同而变化。那么至少不能说 this 就一定指向哪里，要具体情况具体分析</span>
        </li>
        <li>注意不要混淆了 TypeScript 中的 => 和 ES6 中的 =>。
            在 TypeScript 的类型定义中，=> 用来表示函数的定义，左边是输入类型，需要用括号括起来，右边是输出类型。</li>
      </ul>
    </li>
  </ul>

  <h2>实战指南</h2>
  <ul>
    <li>检查函数参数时使用兼容规则，即对象要含有参数对向的属性</li>
    <li>控制异步:已经被大多数浏览器支持的promise，和多用于Node.js环境中的async/await</li>
    <li>当函数中直接写入参数列表时，每个函数的参数都必须有值。强调参数必须一一对应，参数多一个少一个都不能通过编译审查，解决办法时可选参数</li>
    <li>待默认值的参数不需要放在参数的最后面。它可以放在任何位置。如果不是放在最后面，就必须使用undefined或null对该参数进行占位处理</li>
    <li>Promise的链式性时promise的优点。出现在Promsie点上的任何异常都会放在最后的Promise.then中去处理</li>
    <li>
      async/await会将后面的函数转化成为一个Promise。他们用一种声明的方式告诉Javascript运行时在await关键字处暂停执行代码，等结果返回，并在结果处继续执行代码
    </li>
    <li>
      ts中重载使用率很低，大家更倾向于用其他方式去达到类似的效果(联合声明)
    </li>
  </ul>
</body>
</html>